\documentclass[a4paper,12pt]{scrreprt}

\usepackage{latexsym}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage{fancyhdr}
\usepackage{amsmath}
\usepackage{geometry}

\usepackage{graphicx}
\geometry{a4paper, top=30mm, left=25mm, right=25mm, bottom=30mm, headsep=10mm, footskip=12mm}

\pagestyle{fancy}
\lhead{Embedded - Übung 09+10 (Projekt)}
\chead{}
\rhead{Monika Fellner, Thomas Hribernig \\ Matr.Nr.: 0557314, Matr.Nr.: 0755842} 
\lfoot{}
\cfoot{}
\rfoot{\tiny{\textsc{Seite \thepage}}}
\renewcommand {\headrulewidth }{0.1 pt}
\renewcommand {\footrulewidth }{0.1 pt} 

%opening
\title{Embedded and Pervasive Systems - Übung 09+10 (Projekt)}
\author{Monika Fellner \\(0557314/521, Gruppe 1) \\ \\ Thomas Hribernig \\(0755842/521, Gruppe 1)}

\begin{document}
\maketitle
\section*{Einführung}
Das in Java geschriebene Programm verwendet zum Klassifizieren der Bewegungen den kNearest-Neigbours Lern-Algorithmus, das heißt, jede Aktivität muss zuerst einmal trainiert werden.
Die Daten des 3-Achsen-Beschleunigungssensors werden zu 9 Dimensionalen Feature Vektoren pro Zeitschritt zusammengefasst.
Der Feature Vektor besteht aus (jeweils für alle 3 Achsen):
\begin{itemize}
\item Durchschnitt
\item Änderung
\item Absolute Änderung
\end{itemize}
Die Trainingsdaten können gespeichert werden und liegen auch der Abgabe bei.

\section*{Anbringung des Sensors und Definition der Bewegungen}
Die Anbringung des Sensors (3-Achsen-Bewegungssensor) erfolgt am rechten Handrücken.
Das Kabel muss richtung Ellenbogen zeigen. 
Die Bewegungen wurden wie folgt definiert:
\begin{itemize}
 \item STAND: Der rechte Arm hängt entspannt nach unten (Fingerspitzen zeigen zum Boden), da beim Stehen keine / kaum Bewegungen entstehen.
 \item MOVE: Der rechte Arm bewegt sich vor und zurück, die Fingerspitzen zeigen dabei nach vorne. Diese Bewegung soll die natürliche Vor-/Rückbewegung der Arme beim Gehen simulieren.
 \item WORK: Die rechte Hand wird mit leicht abgewinkelten Fingern auf die Tischfläche gelegt, die Fingerspitzen können sich dabei leicht bewegen. Dies soll die Arbeit an der Maus bzw an der Tastatur darstellen.
 \item THINK: Die rechte Hand befindet sich auf Höhe der rechten Schläfe und die Finger führen dabei leichte Kratzbewegungen durch. 
 \item RELAX: Die rechte Hand wird in den Nacken gelegt. Diese Haltung wurde gewählt, da man sich beim Relaxen zurücklehnt und die Hände zur Stützung des Kopfes in den Nacken legt.
\end{itemize}

\section*{Installation}
Alle Klassen in dem Ordner src müssen mit javac compiliert werden.
Beim Start muss die Bibliothek Phidget21.jar im Classpath vorhanden sein.\\
Starten Sie die Klasse \verb+phidgetmotion.Main+ \\
Beispiel: \verb+java -classpath ./bin;./lib/Phidget21.jar; phidgetmotion.Main+ \\
Optional kann der Pfad zu Gnuplot als Parameter angegeben werden (nur für Windows nötig).
Die standard Modell Datei wird automatisch geladen und das Programm ist funktionsbereit.
\section*{Panel Train}
Hier kann man Modell Dateien erstellen, laden, editieren und speichern.
Parameter:
\begin{itemize}
\item Update Interval: Zeit in der Features für einen Vektor gesammelt werden.
pro Zeitinterval wird also ein Featurevektor erstellt.
\item kNearest: Gibt an die wievielt nächsten Feature Vektoren für die Classifizierung berücksichtigt werden sollen.
\item Maximal Training Samples: Gibt an nach wievielen gesammelten Feature Vektoren das Trainieren abgebrochen werden soll.
\end{itemize}
In der Liste werden alle Aktivitätsklassen angezeigt.
Diese können erweitert (mit "`Add Class"') und gelöscht (mit "`Remove Class"') werden.
Außerdem kann man die Trainingsdaten der jeweiligen oder aller Aktivitätsklassen löschen um mit dem Training erneut zu beginnen.
Beim Trainig muss man während der gesamten Zeit die gewählte Aktion durchführen, damit Feature Vektoren erstellt werden können die später als Vergleichsbasis dienen.
\begin{center}
 \includegraphics[width=400px,bb=0 0 626 295,keepaspectratio=true]{./scr_trainPanel.PNG}
 % scr_trainPanel.PNG: 834x393 pixel, 96dpi, 22.07x10.40 cm, bb=0 0 626 295
\end{center}


\section*{Panel Test}
Hier werden einfach die Daten des Sensors gelesen und entsprechend dem im Train-Panel ausgewählten Modell klassifiziert. Der Benutzer kann so testen und üben, welche Bewegungen der Hand das System welcher Aktivität zuordnet.
\begin{center}
 \includegraphics[width=400px,bb=0 0 622 293,keepaspectratio=true]{./src_testPanel.PNG}
 % src_testPanel.PNG: 829x391 pixel, 96dpi, 21.94x10.35 cm, bb=0 0 622 293
\end{center}

\section*{Panel Evaluate}
In diesem Panel werden dem Benutzer Aktivitäten vorgegeben, welche durch den Benutzer ausgeführt werden müssen. Über die evaluierten Aktivitäten wird eine statistische Auswertung errechnet, dazu wird der Name, das Alter und das Geschlecht des Benutzers erfasst.\\
Um eine Evaluierung starten zu können, muß zum einen das Phidget angeschlossen sein und zum anderen eine Datei mit den durchzuführenden Aktivitäten ausgewählt werden. Wenn noch keine solche Datei exisitert, kann mittels dem Button ``Create'' eine solche Datei erstellt werden. Die Aktivitäten werden dabei aus dem geladenen Modell entnommen und in zufälliger Reihenfolge in die Datei geschrieben. Dabei kommt jede Aktiviät sechsmal vor.\\
Um statistische Auswertungen anzeigen zu können, muß eine Statistik-Datei geladen werden (ist noch keine vorhanden, wird beim Öffnen automatisch eine erzeugt). \\
Die Evaluierung wird durch drücken des Buttons ``start Evaluation'' gestartet. Der Button ändert sich dann in ``stop Evaluation'', ein nochmaliges Betätigen stoppt die Evaluierung. 
Im linken Bereich wird nach dem Start die durchzuführende Aktivität angezeigt, ein Countdown von vier Sekunden ermöglicht es dem Benutzer, die Hand in die entsprechnde Position zu bringen. Nach den vier Sekunden startet die Erkennung der ausgeführten Aktivität. Die momentan erkannte Aktivität wird im rechten Bereich angezeigt. Sollte diese vor Ablauf der 10 Sekunden bereits mit der geforderten übereinstimmen, wird die Erkennung beendet und die nächste Aktivität angezeigt.\\
Wenn alle Aktivitäten evaluiert wurden, stoppt die Evaluierung automatisch.\\
Nach dem Beenden der Evaluierung können die Werte über den Button ``Gen. Tables'' in eine Tabelle (CSV-Format) exportiert werden. Der Button ``Show'' erstellt drei Diagramme, welche die Fehler- und Erkennungsrate sowie die mittlere Erkennungszeit (Gesamt und pro Aktivität) als Balkendiagramm, sowie die minimale und maximale Erkennungsdauer und das Interval in dem 50 \% der Erkennungszeiten liegen als Boxplot an (für alle in dem Statitik-File gespeicherten User). 
\begin{center}
 \includegraphics[width=400px,bb=0 0 623 293,keepaspectratio=true]{./src_EvalPanel.PNG}
 % src_EvalPanel.PNG: 831x390 pixel, 96dpi, 21.99x10.32 cm, bb=0 0 623 293
\end{center}

\section*{Interpretation der empirischen Evaluierung}
Im allgemeinen ist die Fehlerrate sehr niedrig, da auch unser Klassifizierer relativ robust gegenüber Ausreißern ist. 
Gerade bei der Aktivität ``STAND'' hängt die Fehlerrate bzw. Erkennungszeit stark von der Kalibrierung ab.
Durch die Vorbereitungszeit ist die Reaktion manchmal sehr schnell, dadurch ist das untere Quartil beim Boxplot oft 0.

\subsection*{Mittlere Erkennungszeit pro Aktivität und Gesamt über alle User}
\begin{center}
 \includegraphics[width=400px,bb=0 0 480 290,keepaspectratio=true]{./recogTime.png}
 % recogTime.png: 640x387 pixel, 96dpi, 16.94x10.24 cm, bb=0 0 480 290
\end{center}

\subsection*{Erkennungs- und Fehlerrate von jedem User}
\begin{center}
 \includegraphics[width=400px,bb=0 0 480 290,keepaspectratio=true]{./failureRate.png}
 % failureRate.png: 640x387 pixel, 96dpi, 16.94x10.24 cm, bb=0 0 480 290
\end{center}

\subsection*{Minimale und maximale Erkennungszeit sowie jenes Zeitinterval, in dem sich 50 \% der durchschnittlichen Erkennungsdauer befinden}
\begin{center}
 \includegraphics[width=400px,bb=0 0 480 290,keepaspectratio=true]{./boxPlot.png}
 % boxPlot.png: 640x387 pixel, 96dpi, 16.94x10.24 cm, bb=0 0 480 290
\end{center}

\end{document}
